function Node(element) {
    this.element = element; //当前元素的name
    this.next = null; //当前元素的下一个元素
    this.previous = null; //当前元素的上一个元素
}
function Llist() {
    this.head = new Node("head");
    this.current = this.head; //默认执行head
    // this.find = find;
    // this.insert = insert;
    // this.remove = remove;
    // this.display = display;
    // this.next = next;
    // this.prev = prev;
}
//执行链表下一个
Llist.prototype.next = function(index) {
    //如果没有参数，默认为下一个
    if (!index) {
        this.current = this.current.next;
        return this.current;
    } else {
        //如果有参数，就是下num个
        var num = 0;

        var currNode = this.current.next;
        while (!(currNode.next === null) && !(num == index)) {
            currNode = currNode.next;
            num++;
        }
        if (num > 0) {
            this.current = currNode;
            return currNode;
        }
        return null;
    }
}
;

//如果没有返回null
Llist.prototype.prev = function(index) {
    //如果没有参数，默认为前一个
    if (!index) {
        this.current = this.current.previous;
        return this.current;
    } else {
        //如果有参数，就是前num个
        var num = 0;
        var currNode = this.head;
        while (!(currNode.previous === null) && !(num == index)) {
            currNode = currNode.previous;
            num++;
        }
        if (num > 0) {
            this.current = currNode;
            return currNode;
        }
        return null;
    }
}
;
//辅助insert的一个函数
Llist.prototype.find = function(item) {
    var currNode = this.head;
    while (currNode.element != item) {
        currNode = currNode.next;
    //console.log("xx", currNode)
    }
    return currNode;
}
;
//在指定元素后面插入新元素
Llist.prototype.insert = function(newElement, item) {
    var newNode = new Node(newElement);
    var current = this.find(item);
    //更新新元素的前后连接
    newNode.next = current.next;
    newNode.previous = current;
    //更新当前元素的下一个连接
    current.next = newNode;
}

//查找链表最后一个元素
Llist.prototype.findLast = function() {
    var currNode = this.head;
    while (!(currNode.next === null)) {
        currNode = currNode.next;
    }
    ;
    return currNode;
}
;
//删除指定元素
Llist.prototype.remove = function(item) {
    var prevNode = this.find(item);
    //跳过当前元素的引用
    if (prevNode.next == null) {
        //更新元素前后的链接
        currNode.previous.next = currNode.next;
        currNode.next.previous = currNode.previous;
        //把当前元素和前后元素的链接剔除
        currNode.next = null;
        currNode.previous = null;
    }
}

//正方向显示链表
Llist.prototype.display = function() {
    var currNode = this.head;
    var array = [];
    //动态更新currNode，往后查找
    while (currNode.next) {
        array.push(currNode.next.element)
        currNode = currNode.next;

    }
    ;
    return array;
}
//反方向显示链表
Llist.prototype.dispReverse = function() {
    var currNode = this.head;
    currNode = this.findLast();

    var array = [];
    while (!(currNode.previous === null)) {
        currNode = currNode.previous;
        array.push(currNode.next.element)
    }
    ;
    return array;
}


